/*
 * ServidorRemoto.h
 *
 *  Created on: 22/07/2014
 *      Author: migue
 */

#ifndef SERVIDORREMOTO_H_
#define SERVIDORREMOTO_H_

#include "../defines.h"
#include "../ServidorRPC/servidor_rpc.h"
#include <sys/socket.h>


#define NOMBRE_SERVIDOR_IDS		"servidor_ids"

class ServidorRemoto {
public:
	ServidorRemoto();

	int pedirIdAdministrador();

	int consultarDatos(int id);

	int pedirIdPersona(int idPropio);

	int pedirIdSala(int numSala, Tipos::TipoSala tipo, Tipos::LugarDeSala lugar);

	int pedirIdPuerta(int numPuerta, Tipos::TipoDePuerta tipo);

	int pedirIdBus(int numBus);

	int pedirIdBUSRepuestoGeneral(int& idRepuestoGral);

	int idBusRepuestoGeneral();

	int pedirIdBUSRepuesto(int numBusRoto, int idBusRepuesto);

	int pedirIdBroker(int numBroker, int puertoEscucha);


	void datosConexion(int& idBroker, struct sockaddr& dirBroker, int& puertoBroker);

	void datosDeBroker(int idBroker, struct sockaddr& dirBroker, int& puertoEscucha);

	void datosBroker(int& timeoutAnillo);

	int idBrokerConectado();


	int consultarIdSala(int numSala, Tipos::TipoSala tipo, Tipos::LugarDeSala lugar);

	int consultarIdPuerta(int numPuerta, Tipos::TipoDePuerta tipo);

	int consultarIdBus(int numBus);


	/**
	 * retorna el id del nuevo broker a conectarse.
	 * con datosDeConexion(...) se obtienen la ip y el puerto del nuevo broker
	 */
	int informarBrokerCaido(int idCliente, int idBrokerCaido);


	RespuestaRPC* respuesta();

	virtual ~ServidorRemoto();

private:
	void consultar_servidor();

	RespuestaRPC* _resp;
	DatosEntidad _datosEnt;
};

#endif /* SERVIDORREMOTO_H_ */
